package com.itmuch.cloud;

import com.itmuch.config.TestConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.ribbon.RibbonClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

/**
 * 服务消费者
 *
 * Spring cloud有两种服务调用方式，一种是ribbon+restTemplate，另一种是feign。
 * ribbon是一个负载均衡客户端，可以很好的控制htt和tcp的一些行为。Feign默认集成了ribbon。
 * ribbon 已经默认实现了这些配置bean：
 * IClientConfig ribbonClientConfig: DefaultClientConfigImpl
 * IRule ribbonRule: ZoneAvoidanceRule
 * IPing ribbonPing: NoOpPing
 * ServerList ribbonServerList: ConfigurationBasedServerList
 * ServerListFilter ribbonServerListFilter: ZonePreferenceServerListFilter
 * ILoadBalancer ribbonLoadBalancer: ZoneAwareLoadBalancer
 *
 *
 * 通过@EnableDiscoveryClient向服务中心注册；
 * 并且向程序的ioc注入一个bean: restTemplate;
 * 并通过@LoadBalanced注解表明这个restRemplate开启负载均衡的功能。
 *
 * @author qinjr
 */
@SpringBootApplication
@EnableDiscoveryClient
@RibbonClient(name = "microservice-provider-user", configuration = TestConfiguration.class)
public class ConsumerMovieRibbonApplication {

	@Bean
	@LoadBalanced
	public RestTemplate restTemplate() {
		return new RestTemplate();
	}


	public static void main(String[] args) {
		SpringApplication.run(ConsumerMovieRibbonApplication.class, args);
	}

}
